package com.gdty.sqlite.utils;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import com.gdty.sqlite.vo.SQLVo;
import com.gdty.sqlite.vo.UpdateVo;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DBHelper extends SQLiteOpenHelper {

    public static final String tag = "DBHelper";
    private int version;//升级需要修改该版本，并在onUpgrade写上对应sql
    private SQLVo vo;//初始化和更新的逻辑
    private Map<Integer,String> update = new HashMap<>();

    /**
     * 初始化
     * @param context
     * @param dbPath
     * @param version
     * @param vo 更新实体
     */
    public DBHelper(Context context, String dbPath, int version, SQLVo vo) {
        super(context, dbPath, null, version);
        this.version = version;
        this.vo = vo;

        //
        Log.e(tag,"初始化版本更新的SQL！");
        List<UpdateVo> list = vo.getUpdateSql();
        if(list!=null&&!list.isEmpty()){
            for(UpdateVo usql:list){
                update.put(usql.getVersion(),usql.getSql());
            }
        }
    }

    /**
     * 功能：进行创建表格，只能onCreate方法只有在第一次创建数据库的时候才会被调用，
     * @param database
     */
    @Override
    public void onCreate(SQLiteDatabase database) {
        Log.e(tag, "创建数据库表");
        int initDBVersion = 1;
        database.execSQL(vo.getInitSql());
        onUpgrade(database, initDBVersion, version);
    }

    /**
     * 功能：数据库版本更新
     * @param database
     * @param oldVersion 旧版本
     * @param newVersion 新版本
     */
    @Override
    public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
        Log.e(tag, "更新数据库表：从" + oldVersion + "到" + newVersion);
        for (int i = oldVersion; i < newVersion; i++) {
            int flag = i+1;
            String sql = update.get(flag);
            database.execSQL(sql);
        }
    }

}
